home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Magazine / C_Tutorial / Part-6 / iff.h < prev    next >
C/C++ Source or Header  |  1997-10-25  |  8KB  |  286 lines

  1. #ifndef LIBRARIES_IFF_H
  2. #define LIBRARIES_IFF_H
  3. /*
  4. **
  5. **    $Id: iff.h,v 23.2 93/05/24 16:03:28 chris Exp $
  6. **    $Revision: 23.2 $
  7. **
  8. **    $Filename: Libraries/iff.h $
  9. **    $Author: Christian A. Weber $
  10. **    $Release: 23.2 $
  11. **    $Date: 93/05/24 16:03:28 $
  12. **
  13. **    Standard header file for programs using iff.library
  14. **
  15. **    COPYRIGHT (C) 1987-1993 BY CHRISTIAN A. WEBER, BRUGGERWEG 2,
  16. **    CH-8037 ZUERICH, SWITZERLAND (chris@mighty.adsp.sub.org).
  17. **    THIS FILE MAY BE FREELY DISTRIBUTED. USE AT YOUR OWN RISK.
  18. **
  19. */
  20.  
  21. #ifndef EXEC_TYPES_H
  22. #include <exec/types.h>
  23. #endif
  24.  
  25. #define IFFNAME "iff.library"
  26. #define IFFVERSION 23L                    /* Current library version */
  27.  
  28. /****************************************************************************
  29. **    Error codes (returned by IFFL_IFFError())
  30. */
  31.  
  32. #define IFFL_ERROR_BADTASK            -1    /* IFFL_IFFError() called by wrong task */
  33. #define IFFL_ERROR_OPEN                16    /* Can't open file */
  34. #define IFFL_ERROR_READ                17    /* Error reading file */
  35. #define IFFL_ERROR_NOMEM            18    /* Not enough memory */
  36. #define IFFL_ERROR_NOTIFF            19    /* File is not an IFF file */
  37. #define IFFL_ERROR_WRITE            20    /* Error writing file */
  38. #define IFFL_ERROR_NOILBM            24    /* IFF file is not of type ILBM */
  39. #define IFFL_ERROR_NOBMHD            25    /* BMHD chunk not found */
  40. #define IFFL_ERROR_NOBODY            26    /* BODY chunk not found */
  41. #define IFFL_ERROR_BADCOMPRESSION    28    /* Unknown compression type */
  42. #define IFFL_ERROR_NOANHD            29    /* ANHD chunk not found */
  43. #define IFFL_ERROR_NODLTA            30    /* DLTA chunk not found */
  44.  
  45. #ifdef IFFLIB_PRE21NAMES
  46. #define IFF_BADTASK -1
  47. #define IFF_CANTOPENFILE 16
  48. #define IFF_READERROR 17
  49. #define IFF_NOMEM 18
  50. #define IFF_NOTIFF 19
  51. #define IFF_WRITEERROR 20
  52. #define IFF_NOILBM 24
  53. #define IFF_NOBMHD 25
  54. #define IFF_NOBODY 26
  55. #define IFF_TOOMANYPLANES 27
  56. #define IFF_UNKNOWNCOMPRESSION 28
  57. #define IFF_NOANHD 29
  58. #define IFF_NODLTA 30
  59. #endif
  60.  
  61.  
  62. /****************************************************************************
  63. **    Common IFF IDs
  64. */
  65.  
  66. #define IFFL_MAKE_ID(a,b,c,d) ((ULONG)(a)<<24L|(ULONG)(b)<<16L|(c)<<8|(d))
  67.  
  68. /*
  69. **    Generic IFF IDs
  70. */
  71. #ifndef ID_FORM        /* don't redefine these if iffparse.h is included */
  72. #define ID_FORM IFFL_MAKE_ID('F','O','R','M')
  73. #define ID_CAT  IFFL_MAKE_ID('C','A','T',' ')
  74. #define ID_LIST IFFL_MAKE_ID('L','I','S','T')
  75. #define ID_PROP IFFL_MAKE_ID('P','R','O','P')
  76. #endif
  77.  
  78. /*
  79. **    Specific IFF IDs
  80. */
  81. #define ID_ANIM IFFL_MAKE_ID('A','N','I','M')
  82. #define ID_ANHD IFFL_MAKE_ID('A','N','H','D')
  83. #define ID_ANNO IFFL_MAKE_ID('A','N','N','O')
  84. #define ID_BMHD IFFL_MAKE_ID('B','M','H','D')
  85. #define ID_BODY IFFL_MAKE_ID('B','O','D','Y')
  86. #define ID_CAMG IFFL_MAKE_ID('C','A','M','G')
  87. #define ID_CLUT IFFL_MAKE_ID('C','L','U','T')
  88. #define ID_CMAP IFFL_MAKE_ID('C','M','A','P')
  89. #define ID_CRNG IFFL_MAKE_ID('C','R','N','G')
  90. #define ID_CTBL IFFL_MAKE_ID('C','T','B','L')
  91. #define ID_DLTA IFFL_MAKE_ID('D','L','T','A')
  92. #define ID_ILBM IFFL_MAKE_ID('I','L','B','M')
  93. #define ID_SHAM IFFL_MAKE_ID('S','H','A','M')
  94.  
  95. #define ID_8SVX IFFL_MAKE_ID('8','S','V','X')
  96. #define ID_ATAK IFFL_MAKE_ID('A','T','A','K')
  97. #ifndef ID_NAME
  98. #define ID_NAME IFFL_MAKE_ID('N','A','M','E')
  99. #endif
  100. #define ID_RLSE IFFL_MAKE_ID('R','L','S','E')
  101. #define ID_VHDR IFFL_MAKE_ID('V','H','D','R')
  102.  
  103. #ifdef IFFLIB_PRE21NAMES
  104. #define MakeID(a,b,c,d) ((ULONG)(a)<<24L|(ULONG)(b)<<16L|(c)<<8|(d))
  105. #endif
  106.  
  107.  
  108. /****************************************************************************
  109. **    Modes for IFFL_OpenIFF()
  110. */
  111.  
  112. #define IFFL_MODE_READ    0
  113. #define IFFL_MODE_WRITE    1
  114.  
  115.  
  116. /****************************************************************************
  117. **    Modes for IFFL_CompressBlock() and IFFL_DecompressBlock()
  118. */
  119.  
  120. #define IFFL_COMPR_NONE        0x0000        /* generic */
  121. #define IFFL_COMPR_BYTERUN1    0x0001        /* ILBM */
  122. #define IFFL_COMPR_FIBDELTA    0x0101        /* 8SVX */
  123.  
  124.  
  125. /****************************************************************************
  126. **    Structure definitions
  127. */
  128.  
  129. /*
  130. **    The private IFF 'FileHandle' structure
  131. */
  132. typedef void *IFFL_HANDLE;
  133.  
  134.  
  135. /*
  136. **    Generic IFF chunk structure
  137. */
  138. struct IFFL_Chunk
  139. {
  140.     LONG  ckID;
  141.     LONG  ckSize;
  142. /*  UBYTE ckData[ckSize] (variable sized data) */
  143. };
  144.  
  145.  
  146. /*
  147. **    BMHD chunk (BitMapHeader) of ILBM files
  148. */
  149. struct IFFL_BMHD
  150. {
  151.     UWORD w,h;
  152.     WORD  x,y;
  153.     UBYTE nPlanes;
  154.     UBYTE masking;
  155.     UBYTE compression;
  156.     UBYTE pad1;
  157.     UWORD transparentColor;
  158.     UBYTE xAspect,yAspect;
  159.     WORD  pageWidth,pageHeight;
  160. };
  161.  
  162.  
  163. /*
  164. **    ANHD chunk (AnimHeader) of ANIM files
  165. */
  166. struct IFFL_ANHD
  167. {
  168.     UBYTE    Operation;
  169.     UBYTE    Mask;
  170.     UWORD    W;
  171.     UWORD    H;
  172.     WORD    X;
  173.     WORD    Y;
  174.     ULONG    AbsTime;
  175.     ULONG    RelTime;
  176.     UBYTE    Interleave;
  177.     UBYTE    pad0;
  178.     ULONG    Bits;
  179.     UBYTE    pad[16];
  180. };
  181.  
  182. #ifdef IFFLIB_PRE21NAMES
  183. #define Chunk IFFL_Chunk
  184. #define BitMapHeader IFFL_BMHD
  185. #define AnimHeader IFFL_ANHD
  186. #endif
  187.  
  188.  
  189. /****************************************************************************
  190. **    IFF library function prototypes (ANSI C)
  191. */
  192.  
  193. void                 IFFL_CloseIFF        ( IFFL_HANDLE );
  194. ULONG                 IFFL_CompressBlock   ( APTR, APTR, ULONG, ULONG );
  195. BOOL                 IFFL_DecodePic       ( IFFL_HANDLE, struct BitMap * );
  196. ULONG                 IFFL_DecompressBlock ( APTR, APTR, ULONG, ULONG );
  197. void                *IFFL_FindChunk       ( IFFL_HANDLE, LONG );
  198. struct IFFL_BMHD    *IFFL_GetBMHD         ( IFFL_HANDLE );
  199. LONG                 IFFL_GetColorTab     ( IFFL_HANDLE, UWORD * );
  200. ULONG                 IFFL_GetViewModes    ( IFFL_HANDLE );
  201. LONG                 IFFL_IFFError        ( void );
  202. BOOL                 IFFL_ModifyFrame     ( void *, struct BitMap * );
  203. APTR                 IFFL_NewOpenIFF      ( char *, LONG );
  204. IFFL_HANDLE             IFFL_OpenIFF         ( char *, ULONG );
  205. LONG                 IFFL_PopChunk        ( IFFL_HANDLE );
  206. IFFL_HANDLE             IFFL_PPOpenIFF       ( char *, char * );
  207. LONG                 IFFL_PushChunk       ( IFFL_HANDLE, ULONG, ULONG );
  208. BOOL                 IFFL_SaveBitMap      ( char *, struct BitMap *, WORD *, LONG );
  209. BOOL                 IFFL_SaveClip        ( char *, struct BitMap *, WORD *, LONG,
  210.                                                         LONG, LONG, LONG, LONG );
  211. LONG                 IFFL_WriteChunkBytes ( IFFL_HANDLE, void *, LONG );
  212.  
  213.  
  214. #ifdef IFFLIB_PRE21NAMES
  215. IFFL_HANDLE    OpenIFF(char *);
  216. void CloseIFF(IFFL_HANDLE);
  217. void *FindChunk(IFFL_HANDLE,LONG);
  218. struct BitMapHeader *GetBMHD(IFFL_HANDLE);
  219. LONG GetColorTab(IFFL_HANDLE,WORD *);
  220. BOOL DecodePic(IFFL_HANDLE,struct BitMap *);
  221. BOOL SaveBitMap(char *,struct BitMap *,WORD *,LONG);
  222. BOOL SaveClip(char *,struct BitMap *,WORD *,LONG,LONG,LONG,LONG,LONG);
  223. LONG IFFError(void);
  224. ULONG GetViewModes(IFFL_HANDLE);
  225. APTR NewOpenIFF(char *,LONG);
  226. BOOL ModifyFrame(void *,struct BitMap *);
  227. IFFL_HANDLE    PPOpenIFF(char *,char *);
  228. #endif
  229.  
  230.  
  231. /****************************************************************************
  232. **    Pragmas for StormC
  233. */
  234.  
  235. extern struct Library *IFFBase;
  236.  
  237. #ifndef NO_PRAGMAS
  238.  
  239. #ifdef __cplusplus
  240. extern "C" {
  241. #endif
  242.  
  243. // #pragma amicall(IFFBase, 0x1E, IFFL_OldOpenIFF(a0))
  244. #pragma amicall(IFFBase, 0x24, IFFL_CloseIFF(a1))
  245. #pragma amicall(IFFBase, 0x2A, IFFL_FindChunk(a1, d0))
  246. #pragma amicall(IFFBase, 0x30, IFFL_GetBMHD(a1))
  247. #pragma amicall(IFFBase, 0x36, IFFL_GetColorTab(a1, a0))
  248. #pragma amicall(IFFBase, 0x3C, IFFL_DecodePic(a1, a0))
  249. #pragma amicall(IFFBase, 0x42, IFFL_SaveBitMap(a0, a1, a2, d0))
  250. #pragma amicall(IFFBase, 0x48, IFFL_SaveClip(a0, a1, a2, d0, d1, d2, d3, d4))
  251. #pragma amicall(IFFBase, 0x4E, IFFL_IFFError())
  252. #pragma amicall(IFFBase, 0x54, IFFL_GetViewModes(a1))
  253. // #pragma amicall(IFFBase, 0x5A, IFFL_OldNewOpenIFF(a0, d0))
  254. #pragma amicall(IFFBase, 0x60, IFFL_ModifyFrame(a1, a0))
  255. // #pragma amicall(IFFBase, 0x66, IFFL_OldPPOpenIFF(a0, a1))
  256. #pragma amicall(IFFBase, 0x78, IFFL_OpenIFF(a0, d0))
  257. #pragma amicall(IFFBase, 0x7E, IFFL_PushChunk(a0, d0, d1))
  258. #pragma amicall(IFFBase, 0x84, IFFL_PopChunk(a0))
  259. #pragma amicall(IFFBase, 0x8A, IFFL_WriteChunkBytes(a0, a1, d0))
  260. #pragma amicall(IFFBase, 0x90, IFFL_CompressBlock(a0, a1, d0, d1))
  261. #pragma amicall(IFFBase, 0x96, IFFL_DecompressBlock(a0, a1, d0, d1))
  262.  
  263. #ifdef IFFLIB_PRE21NAMES
  264. #pragma amicall(IFFBase, 0x1E, OpenIFF(a0))
  265. #pragma amicall(IFFBase, 0x24, CloseIFF(a1))
  266. #pragma amicall(IFFBase, 0x2A, FindChunk(a1, d0))
  267. #pragma amicall(IFFBase, 0x30, GetBMHD(a1))
  268. #pragma amicall(IFFBase, 0x36, GetColorTab(a1, a0))
  269. #pragma amicall(IFFBase, 0x3C, DecodePic(a1, a0))
  270. #pragma amicall(IFFBase, 0x42, SaveBitMap(a0, a1, a2, d0))
  271. #pragma amicall(IFFBase, 0x48, SaveClip(a0, a1, a2, d0, d1, d2, d3, d4))
  272. #pragma amicall(IFFBase, 0x4E, IFFError())
  273. #pragma amicall(IFFBase, 0x54, GetViewModes(a1))
  274. #pragma amicall(IFFBase, 0x5A, NewOpenIFF(a0, d0))
  275. #pragma amicall(IFFBase, 0x60, ModifyFrame(a1, a0))
  276. // #pragma amicall(IFFBase, 0x66, PPOpenIFF(a0, a1))
  277. #endif
  278.  
  279. #ifdef __cplusplus
  280. };
  281. #endif
  282.  
  283. #endif
  284.  
  285. #endif
  286.